
#include "reg52.h"

sbit LED0=P2^0;	
sbit LED1=P2^1;	
sbit LED2=P2^2;	
sbit LED3=P2^3;	
sbit LED4=P2^4;	

//对系统默认数据类型进行重定义
typedef unsigned char u8;
typedef unsigned int u16;

u8 smgcode[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;


void delay_ms(unsigned int delayms) {
    unsigned int delayus = delayms * 1000;
    //10us
    unsigned int delayunit = delayus / 10;
    while (delayunit--);
}

/**
 * 数码管
 * @param pos 
 * @param num 
 */
void smg_show(unsigned int pos,unsigned int num){
    switch (pos) {
        case 0: LSC=1;LSB=1;LSA=1;break;
        case 1: LSC=1;LSB=1;LSA=0;break;
        case 2: LSC=1;LSB=0;LSA=1;break;
        case 3: LSC=1;LSB=0;LSA=0;break;
        case 4: LSC=0;LSB=1;LSA=1;break;
        case 5: LSC=0;LSB=1;LSA=0;break;
        case 6: LSC=0;LSB=0;LSA=1;break;
        case 7: LSC=0;LSB=0;LSA=0;break;
    }
    P0= smgcode[num];
    delay_ms(1);
    P0=0x00;
}


/*******************************************************************************
* 函 数 名       : uart_init
* 函数功能		 : 串口通信中断配置函数，通过设置TH和TL即可确定定时时间
* 输    入       : baud：波特率对应的TH、TL装载值 波特率为9600
* 输    出    	 : 无
*******************************************************************************/
void uart_init(u8 baud)
{
	TMOD|=0X20;	//设置计数器工作方式2
	SCON=0X50;	//设置为工作方式1
	PCON=0X80;	//波特率加倍
	TH1=baud;	//计数器初始值设置
	TL1=baud;
	ES=1;		//打开接收中断
	EA=1;		//打开总中断
	TR1=1;		//打开计数器		
}

void send_tocomputor(unsigned char da){
    SBUF=da;
    while (T1==0);
    T1==0;
}


//串口通信中断函数
void uart() interrupt 4 
{
	u8 rec_data;
	RI = 0;			//清除接收中断标志位
	rec_data=SBUF;	//存储接收到的数据
	SBUF=rec_data;	//将接收到的数据放入到发送寄存器
	while(!TI);		//等待发送数据完成
	TI=0;			//清除发送完成标志位				
}


void main()
{
	 uart_init(0XFA);
	 while(1){
		 //send_tocomputor('A');
		 //smg_show(0,0);
	   //smg_show(1,1);
	 }
   
}